草庐IT

c++ getline和stringstream

全部标签

c++ - 静态 std::stringstream 的 Clang-tidy 警告

我有以下MCVE:#includestructA{staticstd::stringstreams;};std::stringstreamA::s;intmain(){}当我在此代码上运行clang-tidy6.0.1时,我收到以下警告:static_sstream.cpp:7:22:warning:initializingnon-localvariablewithnon-constexpressiondependingonuninitializednon-localvariable'out'[cppcoreguidelines-interfaces-global-init]std::

c++ - 使用 stringstream 缩进/居中输出

我正在学习C++并获得了将帕斯卡三角形发送到输出的项目(经过n行计算后)。获得这样的输出,存储在字符串流“缓冲区”中1111211331但我更想要的是1111211331我的想法是:计算最后一行和当前行长度的差值(我知道最后一行最长)。然后使用空格填充每一行(行长差的一半)。我现在的问题是:我不明白getLine是如何工作的,也不知道我如何提取特定的(->最后一行)我不知道也找不到如何编辑字符串流中的特定行不知何故,我觉得我不是在使用stringstream的最佳方式。所以这是一个相当常见的问题:你是如何解决这个问题的,如果可能的话,使用stringstreams-如何解决?

c++ - 具有直接输出缓冲区/字符串结果访问的 std::stringstream,避免复制?

是否有std::stringstream的规范/公共(public)/免费实现变体,我每次调用时都不需要为完整的字符串拷贝付费海峡()?(可能通过在osteam类中提供直接的c_str()成员?)我在这里发现了两个问题:C++stlstringstreamdirectbufferaccess(是的,它基本上是相同的标题,但请注意,它被接受的答案根本不适合这里的问题。)Streamfromstd::stringwithoutmakingacopy?(同样,接受的答案与这个问题不匹配。)“当然”还有已弃用的std::strstream类确实允许直接缓冲区访问,尽管它的接口(interfac

c++ - Python 等效于 C++ getline()

在C++中,我们可以通过在getline()函数中给出我们自己选择的定界字符来输入多行。但是我不能在Python中做同样的事情!!它只有raw_input()和sys.stdin.readline()方法可以读取直到我按下回车键。有什么方法可以自定义它以便我可以指定我自己的分隔符吗? 最佳答案 是否仍要按Enter键创建多行?你如何结束输入?或者你想在一行中指定多行?如果是前者,尝试循环raw_input()直到写入告诉它停止的内容:lines=[]whileTrue:user_input=raw_input()ifuser_inp

c++ - memorystream - stringstream,字符串,其他?

我正在通过通常的c++/STL/iostream语法读取二进制文件。我正在将整个内容复制到一个动态分配的char数组中,到目前为止效果很好。但由于我想将部分内容作为程序的另一部分的行提供,我认为坚持使用流会更好/更容易,因为我不想四处乱逛带有cstring函数和指针。我现在的问题是,如何将读取的内容存储在内存中。在字符串流中?还是在一个字符串中?哪个更合适?两者之间有什么优点或缺点吗?提前致谢! 最佳答案 如果想以流的形式从中读取,不妨直接从文件读取到stringstream:std::stringstreamdata;data将“

c++ - 从 getline() 返回的字符串是否以 null 结尾?

在谷歌搜索了一段时间后我不太确定的一件事是getline()的返回字符串。希望在这里得到证实。std::getline这个全局版本返回一个std::string所以它不一定是空终止的。一些编译器可能会附加“\0”,而其他编译器则不会。std::istream::getline此函数返回一个c风格的字符串,因此可以保证该字符串以null结尾。是这样吗? 最佳答案 空终止是一个仅适用于C字符串的概念;它不适用于std::string的对象-他们让您通过调用size()找到尺码,并且不需要空终止。但是,从std::string返回的字符串

c++ - 当 std::stringstream 使用 ("some content"构造时,tellg() 的预期行为是什么,std::ios::in|std::ios::ate)?

我有以下令我惊讶的代码(使用libstdc++4.8)...#include#include#includeusingnamespacestd;intmain(){std::strings("somecontent");std::stringstreamss(s,std::ios::in|std::ios::ate);std::istream&file=ss;//ss.clear();Makesnodifference...std::cout...具有以下输出。tellg()pos:0此行为与使用std::ifstream(std::ios::ate)时不同。此行为是否正确/符合预期?

c++ - std::stringstream 获取写入数据的有效方式,复制到另一个流

在不编写自定义rdbuf的情况下,有什么方法可以有效地使用stringstream吗?也就是说,满足这些要求:可以重置流并重新开始写入,而无需释放之前的内存获取写入数据的constchar*(连同长度)而不创建临时对象在不创建临时字符串的情况下填充流如果有人能给我一个明确的“不”,那就太好了。现在,我也使用boost,所以如果有人可以提供一个boost的替代方案,那就太好了。它必须同时提供istream和ostream接口(interface)。 最佳答案 使用boost::interprocess::vectorstreamorb

c++ - 全局设置 stringstream 的精度

我在我的整个项目中使用了stringstream,它有超过30个文件。我最近克服了一个由stringstring引起的问题,在这个问题中我将double解析为stringstream并且丢失了精度。所以现在我想为所有文件设置精度。有什么办法可以将它设置在全局某处,这样我就不需要在每个文件的任何地方进行更改。有人建议我看看是否可以使用语言环境。请帮我解决这个问题,如果您有代码或任何代码链接,它会更有用。 最佳答案 可能最简单的方法是用您自己的继承自stringstream的类替换您在整个程序中对stringstream的使用:clas

c++ - std::cin 上的 std::getline

是否有充分的理由:std::stringinput;std::getline(std::cin,input);getline调用不会等待用户输入?cin的状态是否以某种方式搞砸了? 最佳答案 很可能您在读取一些其他数据后尝试读取字符串,例如int。考虑输入:11isaprime如果你使用下面的代码:std::cin>>number;std::getline(std::cin,input)getline只会读取11之后的换行符,因此您会觉得它没有等待用户输入。解决这个问题的方法是使用虚拟getline来消耗数字后的新行。